home *** CD-ROM | disk | FTP | other *** search
/ QRZ! Ham Radio 8 / QRZ Ham Radio Callsign Database - Volume 8.iso / mac / files / dsp / 56000tar.z / 56000tar / 56000 / flts / lms.hlp < prev    next >
Text File  |  1991-11-26  |  6KB  |  153 lines

  1. LMS ADAPTIVE FILTER
  2.  
  3.  
  4.                   x(0) |----| x(n-1)|----| x(n-2)|----| x(n-3)
  5.      x(n) -------------| 1/z|-------| 1/z|-------| 1/z|----
  6.                    |   |----|   |   |----|   |   |----|   |
  7.                    h0           h1           h2           h3
  8.                      \________  |____   _____|  _________/
  9.                               \______(+)_______/
  10.                                       |
  11.                                       |--------->f(n)
  12.                                       v
  13.            d(n) -------------------->(+)-------->e(n)
  14.                                     -
  15.  
  16.  
  17. Notation and symbols:
  18.   x(n)  - Input sample at time n.
  19.   d(n)  - Desired signal at time n.
  20.   f(n)  - FIR filter output at time n.
  21.   H(n)  - Filter coefficient vector at time n.  H={h0,h1,h2,h3}
  22.   X(n)  - Filter state variable vector at time N.
  23.           X={x(0),x(n-1),x(n-2),x(n-3)}
  24.   u     - Adaptation gain.
  25.   ntaps - Number of coefficient taps in the filter. For this
  26.           example, ntaps=4.
  27.  
  28.  
  29.       True LMS Algorithm        Delayed LMS Algorithm
  30.       ------------------        ---------------------
  31.       Get input sample          Get input sample
  32.       Save input sample         Save input sample
  33.       Do FIR                    Do FIR
  34.       Get d(n), find e(n)       Update coefficients
  35.       Update coefficients       Get d(n), find e(n)
  36.       Output f(n)               Output f(n)
  37.       Shift vector X            Shift vector X
  38.  
  39. System equations:
  40.  e(n)=d(n)-H(n)X(n)    e(n)=d(n)-H(n)X(n)        (FIR filter and error)
  41.  H(n+1)=H(n)+uX(n)e(n) H(n+1)=H(n)+uX(n-1)e(n-1) (Coefficient update)
  42.  
  43. References:
  44.   "Adaptive Digital Filters and Signal Analysis", Maurice G. Bellanger
  45.       Marcel Dekker, Inc. New York and Basel
  46.  
  47.   "The DLMS Algorithm Suitable for the Pipelined Realization of Adaptive
  48.       Filters", Proc. IEEE ASSP Workshop, Academia Sinica, Beijing, 1986
  49.  
  50. Note: The sections of code shown describe how to initialize all
  51.       registers, filter an input sample and do the coefficient update.
  52.       Only the instructions relating to the filtering and coefficient
  53.       update are shown as part of the benchmark.  Instructions executed
  54.       only once (for intialization) or instructions that may be user
  55.       application dependent are not included in the benchmark.
  56.  
  57.  
  58.  
  59.  
  60.             Implementation of the true LMS on the DSP56000
  61.  
  62.  
  63. Memory map:
  64.  
  65.     Initial X                           H
  66.   x(0) x(n-1) x(n-2) x(n-3)       h0   h1   h2   h3
  67.    |                              |
  68.    r0                             r4
  69.                                   r5
  70.  
  71.                                                         Program  Icycles
  72.                                                         Words
  73.  
  74.     move    #XM,r0              ;start of X
  75.     move    #ntaps-1,m0         ;mod 4
  76.     move    #-2,n0              ;adjustment for filtering
  77.     move    #H,r4               ;coefficients
  78.     move    m0,m4               ;mod 4
  79.     move    r4,r5               ;coefficients
  80.     move    m0,m5               ;mod 4
  81.  
  82. _getsmp
  83.     movep   y:input,x0          ;get input sample
  84.  
  85.     clr  a        x0,x:(r0)+ y:(r4)+,y0  ;save x(0), get h0    1      1
  86.     rep  #ntaps-1                        ;do fir               1      2
  87.     mac  x0,y0,a  x:(r0)+,x0 y:(r4)+,y0  ;do taps              1      1
  88.     macr x0,y0,a                         ;last tap             1      1
  89.  
  90.     movep  a,y:output     ;output fir if desired
  91.  
  92.     (Get d(n), subtract fir output, multiply by "u", put
  93.      the result in x1. This section is application dependent.)
  94.  
  95.     move          x:(r0)+,x0 y:(r4)+,a   ;get x(0), h0         1      1
  96.     do   #ntaps,_coefupdate              ;update coefficients  2      3
  97.     macr x0,x1,a  x:(r0)+,x0 y:(r4)+,y0  ;(u e(n) *x(n))+h     1      1
  98.     tfr  y0,a                a,y:(r5)+   ;copy h, save new h   1      1
  99. _coefupdate
  100.     move   x:(r0)+n0,x0  y:(r4)-,y0      ;update r0,r4         1      1
  101.  
  102.     jmp    _getsmp                       ;continue looping
  103.                                                          ------   ------
  104.                                                             10     3N+9
  105.  
  106.  
  107.           Implementation of the delayed LMS on the DSP56000 Revision C
  108.  
  109. Memory map:
  110.  
  111.     Initial X                           H
  112.   x(0) x(n-1) x(n-2) x(n-3)       hx  h0   h1   h2   h3
  113.    |                              |   |
  114.    r0                             r5  r4
  115. hx is an unused value to make the calculations faster.
  116.  
  117.  
  118.                                                        Program  Icycles
  119.                                                        Words
  120.  
  121.     move    #XM,r0              ;start of X
  122.     move    #ntaps-1,m0         ;mod 4
  123.     move    #-2,n0              ;adjustment for filtering
  124.     move    #H+1,r4             ;coefficients
  125.     move    #ntaps,m4           ;mod 5
  126.     move    #H,r5               ;coefficients
  127.     move    m4,m5               ;mod 5
  128.  
  129. _smploop
  130.   movep   y:input,a           ;get input sample
  131.  
  132.   move            a,x:(r0)    ;save input sample                   1  1
  133.   ;error signal is in y1
  134.   clr   a         x:(r0)+,x0  y:(r4)+,y0  ;get x(0), h0            1  1
  135.   do    #ntaps,_fir_cupdate   ;do fir and coefficient update       2  3
  136.   mac   x0,y0,a   y0,b        b,y:(r5)+   ;fir, copy h, save new h 1  1
  137.   macr  x0,y1,b   x:(r0)+,x0  y:(r4)+,y0  ;update h, new x, new h  1  1
  138. _fir_cupdate
  139.   rnd   a       x:(r0)+n0,x0  b,y:(r5)+   ;update r0, save last h  1  1
  140.  
  141.   (Get d(n), subtract fir output (reg a), multiply by "u", put
  142.    the result in y1. This section is application dependent.)
  143.  
  144.   movep         a,y:output         ;output fir if desired
  145.   jmp           _smploop
  146.                                                              ----- -----
  147.                                                               7    2N+6
  148.  
  149.  
  150.  
  151.  
  152. ^Z
  153.